tildetown 6
tildetown #6
Contents
horse simulator 9k00
~dozens
Bean
~mio
a small poem for issue 6
~rogbeer
TSS-001
~ydreniv
Monhegan Island
~durrendal
A (small) guide to indie internet radios
~tsui
thermal printers
~lucidiot
Cardwords
~mio
Thin Lab
~durrendal
standard editors
~durrendal & MidJourney
3}
14
ILS)
23
28
34
38
45
This collective work is licensed under a CC BY-SA license.
More info:
https://tilde.town/~zine/
ES erie) teks 4 “7 hon 7 >!
astod puv aounbete uat™
@ounp ysnw asuoy 243 :9NIONVO WOONTIVE (b
JOTuDyo peTaaym-om3
D moup 3SMw aS40y 242 :9NITINd LOTYYHD (E |
quawnu3suT
6utasnof utey3 y3TM punow6 ay uo
uowatT D aouaTd uvo Aay3 3043 Os “apt s3T
Asavo ySnw assoy 243 :9NTYOTIS NOWST (2
quewnaqsut butysnof uteyy
yatm 6Gutu v aunjdoo uvo Aay3 3oy3 os uaptu
JO 37330q D :ONTTOGTS ONY SNIWAHY (2T
20046 ToTI0s
Puod sweuuow +31 13NdI13 WwID0S (TT
sesu0y J0Z 3Nq uoUMDbhy0q
@4FT $,3F *NOWWY9XOVE 3SYOH (OT
quane Guputms
pezfuouyouds v y3TM ‘u0TzT}eduO0o
aatp ybty o *ONTWWIMS ONY 3ATO HOTH (6
erein lies the very stuff horses is
Welcome, novice you don't de of, roll 3d6 for each ADJECTIV NOUN rel 2
| horse trainer, to already know, my
. the lucrative and little sugar eit, of Th
rewarding a ~ soe aa an Except tfonal — tg Wizard Commitment
SE SP 3! on and you wi : % SS Too Much A le R
MM vithin these ¢ wo bennead awn, boldness, initiative, Uindeatsod Eldritch FHP ansom
Se eiee GaAs ~» @ tusaneeeees gressiveness Electric fos. tanerial arm For The People
. find eveyrything “fp and naming your Lunar hajesty's Dancer For The Win
Py) you need to fill sy first horse, and The Bedpi le's Cheese In. A Box
your fledgling). then entering 7 wild egine. Maher's Shrubber'y @p Under The Sea
stables with your your first Nig !
i SO e upy Daughter 's Dang i
very own sports mpetition. You anic ;
. horses, to aed ety eg Balonced @B your Very Own BB eee ate peng
. compete in horse ' 3 six sided dice What @ Horror al It
sports and win and a 20 sided i sonst 1 8o Randy wueen Honea
PD) notoriety ana one. (Or the BE cunning! -— as ropica Clever ropic oat Gee
| great prizes, and J)) ability to ; Punctual Thund &t avity
i even try your } search online or 8 Proud Favorite under’ GB Mess
. hand at sport in your app fectual ri
horse husbrandry! store for a ...to breed 2 BB Give them t BEB Reliable Ber ee &B@ Aristocrat
| = es dete Z € em Ca oLidaay
But wait, I hear §& virtual dice horses, create a P, f Bea Royalty
ere Mtr ng Regs @ Perfect @ BHangover ¢
you ask. What is { roller.) Come random, temporary Hands 6e : GB 8 Slander
all this then, The wide 3rd horse, and || 8&8 Handsome Mister BB Cake 6B SR Twenties
| really? Why, you rld of horse average all 3 @BUgly a | Doctor @B BB Smoke Be Ho é
| mean to tell me sports awaits! horses* Be Eventual @GBEcho &BaBS P hi
| = attributes to BB Naked sae
determine the BS Soaking. SOX>*KM ROK OTK = TOMO
seats Of Waaguea WW Blistering
|
i 4 Viad
UT 49NP @ATT D “ie pad ond Laysva (s
*4auUTM 243 ST asucy ysebuTdunf
*ysebutuuns 243 :9NTAWNE ONY SNINNNY (8
*2u098 03 uapuo ut sdooy
[eoT{42A abut y6no.y3 passod aq ysnw 37
puo ‘yonp 0 Jo poazsut TTDq D ST TTDq 943
3nq ‘xONP 3ex8Dq 03 UDTTWTS :TIVEISYOH (2
S32TTOW pud STTOq :070d (9
“SUTM YOU aWoY sTe43 03 49Dq yoONP
24} J@ATT@P 03 @PTS SuTJ 241 *324SDq D
MYT
SAZTdd OT * (TTONE
- 23nqt433y) =
326 puo jjutme
noA ‘a3nqyz4330
awos $ ,asu0y
unoA wapun
Tto4 nok 31 “ezp
TTo4 ‘ajadwoo o,
— *
S3t Asoo ysnw asuoy 243 :9NTISNOL ONTY (T
s
C avasiz2
jn
Introduction
This short story is dedicated to ~dozens.
Several months ago he spoke of a tabletop game that involved
growing cats from beans, inviting others to try it and share
their actual plays.! As it happened, someone read the message
and played the game, but the narrative that was supposed to
accompany the results never materialised, having fizzled out in
a desolate post-apocalyptic landscape before it had barely
started.
Here instead is a story about growing, cats and beans, not
necessarily in that order. Discerning readers will observe its
setting is loosely based in a different game, the wonderful
Basement Quest? of which ~dozens is the amazing author and
thoroughly adept game host. He has also kindly given permission
to reproduce my tiny tale of tomfoolery under the CC BY-SA
license.? The story would not have existed without his support
and the patience of fellow players, though any lapses in
judgement for churning out complete drivel are mine alone.
Grattas maximas.
~mio
1. https://dozensanddragons.neocities.org/30.html
2. https://tilde.town/~dozens/quest/
3. https://creativecommons.org/licenses/by-sa/4.0/
Bean
Deep within the bowels of the bustling city of Vay'Nullar was a
building like every other and none other. The unassuming brick
structure stood to one side of Cofe Street, so named after a
giant automaton that had once occupied an empty plot of land
for the sole purpose of selling coffee and the wonders of
mechanical ingenuity before it broke down one day and the lot,
overrun by weeds, was turned into an apothecary. There was no
sign above the entrance to announce itself to the world, the
windows shuttered and the wooden door bolted from within. It
could be said that there was nothing remarkable about the
building except for a colourful row of marching kidney-shaped
beans painted in bas-relief than ran along the base of the
tiled roof. The beans' faces were contorted in various
expressions of merriment, from hopping up and down with silly
grins to flipping on their backs, eyes screwed tight and mouths
wide open in laughter.
No one actually knew for sure if it was a shop, or what it
sold, because the doors had never opened for business. Passers-
by can be forgiven for thinking it was probably an ill-fated
foray into fame and fortune by some enterprising young upstart
that had floundered at the last moment, and the place had long
since been abandoned to the cobwebs of aurs and dust bunnies.
However, the neighbourhood's residents knew differently. If
anyone had cared to ask, they would have recounted in tense,
hushed voices of eerie sounds emanating from the building at
night. Some said they heard loud whooshing noises; others swore
someone or something was lighting crackling bonfires inside,
though they had neither seen light nor smoke from a fire. Still
more spoke of a sound — the more musically-inclined might liken
it to a note blown from a long horn, lowered then abruptly
dampened. The children — the ones who were old enough or
secretly sneaked out past their bedtime — would have simply
described it as if a crowd had gotten together in a room and
farted at the same time.
None of the residents had ever heard nor seen the landlord; as
far as the eldest grannies could remember, the building had
always appeared the way it did. When the city finally sent an
inspector to assess the property after multiple complaints from
the most vocal residents, the man had returned so shocked by
whatever he had seen that to this day he could not utter a
syllable, his entire body frozen in fear whenever the subject
of the bean building was brought up. Cursed, was the conclusion
of a guild of wizards three districts over, though one that
seemed to evade their scanners. A few of the bravest and more
curious among their ranks offered to investigate, but never
returned with their findings. Children were sternly warned by
their parents to stay away and behave, or they would be
snatched up and eaten by the monster that lived within its
walls.
One afternoon, a young girl who was studying the painted relief
along one side of the building heard scratching, mewls, then a
whimper coming from somewhere nearby. Following the sounds, she
rounded the back of the building and spotted a grey kitten with
light charcoal stripes slumped against the wall, paws on their
furry tummy, with a pinched expression on their face. As she
came closer, she could hear a low gurgling sound coming from
somewhere near its tummy. "Oh!" She exclaimed, her face lit up
in understanding. "Stay here, kitty." she told the kitten.
She returned from a nearby shop with a glass bottle of oat
milk, two small dishes and three skewers of tofuna balls. She
set the items in front of the kitten, removed the skewers from
the first dish and filled the other with milk. "Go on, it's for
you." The girl smiled encouragingly at the kitten, who stared
at her with wide eyes before pouncing on the tofuna balls. When
the kitten had emptied the plates, they licked their face and
paws, then looked up at the girl and mewed once before
disappearing into a small hole in the wall of the building
partially covered by a loose board. The girl tried to peer into
the hole but it was too dark within to see anything.
The next day and the day after, the girl returned to the same
spot with food for the kitten, who seemed to be expecting her,
mewing once again before retreating back inside the hole in the
wall after the meal. On the fourth day, the kitten was nowhere
to be seen when the young girl arrived. She bent down to filla
saucer with more milk, and found a single brown bean in it
slightly smaller than a cherry potato. She waited but there was
no sign of the kitten. Eventually she left the offering of
food near the hole and went home.
As the girl lay in bed that night, she examined the bean by the
light of her bedside lamp. She held it up between her thumb and
forefinger, rubbed a thumb against its smooth contours, then
clasped it gently between her palms, gradually warming it as
she peeked at it from between her fingers. After whispering to
the bean for some time, she carefully tucked it under one end
of her pillow, and yawning, turned down the lamp and went to
sleep.
When she next opened her eyes, it was to find herself inside a
gigantic storehouse with a high ceiling that seemed to stretch
on and on into the horizon. One side was lined with glass
partitions, some of which were obscured with thick curtains,
while others had curtains parted aside to reveal the activities
of the occupants within. On another side, separated by a path
the width of two streets, was an open grassy area dotted with
large translucent domes, like hazy soap bubbles on a summer
day. The entire area was bright and well-lit even though she
couldn't make out any significant source of light aside from
the little caddy lamps twinkling from the desks inside the
partitions, or the campers' lamps inside and around the domed
tents.
A cat wearing bright yellow boots, blue overalls anda
construction hat was beckoning her over. She recognised them as
the kitten she had met in the alley earlier, though now they
appeared as tall as her. Just as she was about to call out and
ask where they were, the cat suddenly appeared in front of her
and said eagerly, "There you are! Come along now!"
Everywhere she turned, there were now cats in all shapes,
colours and sizes — short, large, skinny, tiny, chubby,
striped, spotted, black, calico, white, brown, grey, and so on.
Many were patting rectangular panels with various tiny buttons
on the desks. Some were on all fours or sitting in various
positions in front of stools with small boxes that made
whirring, clicking sounds. After each click, the cats would
shift positions, as if striking poses for some invisible
audience. One cat was mixing and matching several new outfits
in light colours. Another was hugging stuffed toy chipmunk
while sorting mushrooms at a picnic table. A few were holding a
burger with an oversized cheese wedge between their paws.
Some who were walking around the partitions were also holding
mugs, the aroma of coffee wafting through the air as they
passed — except for one cat whose paws were wrapped around a
glass of a clear brown drink topped with cherries. A cat sped
by on a contraption with a handle and two thin wheels, which
emitted tinkling sounds from a tiny, nondescript box attached
to a basket in front of the contraption. They passed a group of
six cats gesturing to a black board covered in numbers and
symbols; one of them chanted something that confused the girl
and pushed a button on one edge of the board, which sprayed
water over the surface, erasing the chalk writing. After wiping
the board dry, the cat began rapidly filling the board with
more symbols. When the girl looked over her shoulder, the board
had already washed out the writing, and another cat had taken
up position in front of the board.
Outside one domed tent, a metal arm was mixing a vat of pink
and yellow cream while a cat sat beside it reading aloud froma
scroll. At the next tent, two cats huddled over a thin, grey
bulbous metal stump placed on a tiny wooden table. The cats
seemed to be engaged in a serious conversation at first; then
the girl blinked and they abruptly dissolved into laughs,
thumping the table with a paw and barely grappling onto the
table edge with the other to keep themselves from tumbling and
knocking over the metal rod. A cat reclined against the frame
of a bubble opening and seemed to be intently listening to
something, while a stockpot bubbled merrily on a stove and
spewed out dumplings into a large crusty bread bowl behind
them.
A few steps from the path, a cat hung up pictures onto a pie-
shaped box under the glow of a lamp affixed to their tent. The
lamp slowly changed colours, each new colour followed by
strings of words floating and fading in mid-air like intangible
poetry. Behind them, half-hidden by big rows of vertical posts
made of paper tubes, a cat perched atop a stack of ten thick
black writing pads and was writing in a notebook at a furious
pace, only occasionally stopping to bite into a slice of pie
with a light yellow filling. A blue panel displaying several
lines of indecipherable characters flickered occasionally from
below. Remotely she could barely make out another cat stacking
containers of different sizes neatly as they spoke to a sliding
black case on a table covered in tools and fossils. Inside
another tent, a cat was moving a small stack of old boxes with
lights blinking blearily through the tent walls and shuffling
them inside an animated green cabinet in the shape of a possum.
As the girl stared, some of the cats grinned at her, and others
waved.
At random intervals, a group would gather around a large pipe
made of dark grey metal at the base, which gave way toa
translucent material at knee height, towering up before
disappearing into an opening in the ceiling. Venturing closer,
she realised the translucent pipe was actually made of many
transparent small pipes with beads of light passing through
them at impossibly fast speeds. As the lights spun faster, a
low purr emanated from the pipe, which became louder and louder
in a roaring crescendo as the group fixed their gazes upwards
at a spot where pipe met ceiling, some clapping their paws to a
soundless rhythm that was nonetheless familiar to them all,
until the noise was abruptly cut off to barely a whine and a
chuff once more. The crowd of cats dispersed as if nothing had
happened.
Further on, another group wielding oversized sporks was
shovelling piles of pea-sized, dark brown beans at a glass pane
the size of a large smoke screen, behind which an ornate
fireplace was set over a well-used hearth. The beans seem to
pass through the glass, to be devoured by the giant blaze that
flared and snapped briefly each time it received more tinder.
Some of the cats looked on with somber expressions, and the
10
girl had the feeling that whatever the fire did was as
important — if not more so — than the stream of lights in the
pipes. As the flames gradually changed colour from blood orange
to pale lavender, the group seemed to relax into relieved
smiles and slowed their shovelling, only halting when the fire
had turned a vibrant purple. Her guide gave the group a thumbs-
up before ushering her along the path.
When they had walked a few score feet onward, the young girl
suddenly noticed almost all the cats in their immediate
vicinity had a small rectangular apparatus on them — whether
held in their paws, hanging from a waist pouch, jutting out
from a back pocket, strapped to their caps or arms, or placed
within reach on a nearby desk or table. In that instant, a
resounding chime like a bell rolled across the area where they
were standing. The cats glanced down at their apparatus, which
were lit in varying levels of brightness. Some of the cats
looked up at one another and sported identical grins on their
faces. Then, as though following an unannounced but practised
cue, the cats applied light pressure on their apparatus. For a
moment it was quiet, before the hall erupted into a very loud
raspberry. It was as though a giant balloon had deflated over
their heads and air was coming out of it in one big gush, only
there was no strong burst of wind to blow them all off their
feet. Distantly she heard the answering giggling of babies and
children somewhere around her, though there were no infants or
other children in sight. The cat with the yellow hat turned to
her with a chuckle and said, "Snazzy, huh? Let's keep this a
little secret between us, okay?"
Before the girl could reply, she awoke with a start in her own
room. It took a moment for her to ascertain where she was as
her eyes focused on the shelf by the wall filled with toys and
books, and the morning sunlight streaming in from the bedroom
window. Recalling the cat in boots, she felt around her pillow
for the bean, but her hand only met soft bedsheets. She shook
out her pillow while pushing aside her blankets, checked the
floor and peeked under the bed, but the bean had disappeared.
As she looked around her room, she noticed the mug adorned with
tiny butterflies that she used as a brush holder had been moved
11
from its usual spot on her desk. She got out of bed and padded
barefoot over to the desk. Instead of one baby potato-sized
bean, the mug was filled with a number of small red beans.
Shaking them out in handfuls at a time, she counted 43 in
total.
The girl smiled. When the time came, she and the beans will be
ready.
12
from: ~rogbeer
for: zine of tilde.town, issue
date: 6 September 2022, GMT +8
Give me the smile
That disarms
And forget the guns
But- Alas! Aleck!
Few are the
Peaceful peace-makers
Even so, I pray for more
13
6
TSS-001 - The Pearled Gates
The Pearled Gates are a B55 TSS-class SYNTHETIC
P
ICTURE.
The Pearled Gates are a fabl
a mystical land where the sky always
Strange cybercreatures dwell there,
standing manatees. They use their hypnotizi
led gateway to
shi
ines blue.
incl
udi
ng
ing
shroud-daemons to catch weakly-protected programs.
their favourite food : the rare iridescent
netmoss.
14
Then they use the entropy of their preys to feed
What?
Another set of pretty landscapes and such what from Maine. This
time specifically Monhegan Island which is about 20 NMI off the
coast. You can take a ferry out of Winter Harbor, ME which is a
pleasant and quick trip if the weather's nice. (It was rough as
hell when I went, but worth it all the same).
The island itself is home to a small year round community,
mostly supported by lobster fishing. But during the off season
the community hosts guests in lots of quaint little inns and
bed and breakfasts. There's even a brewery and a pizzaria on
the island which is amusing. And you're able to find some of
the best crab sandwiches I've had yet, sadly I appear to not
have take any photos of said sandwhich, so I'll just have to go
back next year just to contribute that to the zine.
I'll let the photos speak for themselves this year, these are
really just a couple of highlights from a single day hike in
the middle of spring. Hopefully I've adequately captured just
how pretty Monhegan is.
From a technical standpoint all of the conversion and info
gathering was done with simple tools. I converted the RAFs to
JPG with dcraw and GraphicsMagick. I wrote a little script this
year to bulk convert the photos since I have about 250GB in
this set alone.
#!/bin/ash
for RAF in $(ls | grep RAF); do
name=$(echo "$RAF" | awk -F'.' '{print $1}')
gm convert $RAF $name. jpg
done
rtot=$(find $(pwd) -type f£ -name '*.RAF' -exec du -ch {} + |
grep total$ | awk -F'\t' '{print $1}')
jtot=$(find $(pwd) -type f -name '*.jpg' -exec du -ch {} + |
grep total$ | awk -F'\t' '{print $1}')
15
echo "raf: $rtot | jpg: Sjtot"
And then gathering information from the RAF files is pretty
easy, you just need to grep some info from exiftool.
exiftool DSCF3736.RAF grep "Shutter Speed\|Aperture\|ISO\|Film
Mode"
The only hiccup in all of this is that dcraw isn't packaged for
alpine, but it's pretty easy to compile and maintain as an
Esper package.
fetch={url="https://www.dechifro.org/dcraw/dcraw.c",
git=false,
outf="dcraw.c"},
builddir="",
depends={
alpine="gcc musl-dev libraw graphicsmagick" --last
two aren't build deps, just useful
yy
build={
--This requires additional deps, TODO
--"gcc -o dcraw -04 dcraw.c -lm -ljasper -ljpeg
-lilcms2"
"gcc -o deraw -04 dcraw.c -lm —-DNODEPS”™
yy
inst={{perms=755, {"dcraw"}, out="/usr/local/bin/"}}
Anyways, all of that is less interesting than the actual
photos! So enjoy!
16
Farside
£11 1/250 200 Astia
17
£11 1/250 200 Astia
18
f11 1/250 200 Astia
Flowers
£2.8 1/250 200 Velvia
20
Gulls
£7.2 1/250 200 Astia
21
£7.2 1/250 200 Astia
22
A (small) guide to indie internet radios
You're back home from a tiring day out. You want to relax
listening to some music. You have acquired lots of music along
your journey throughout the Internet. However, you don't want
to listen to any of it right now. You don't want to deal with
the decision paralysis of youtube or bandcamp either.
Furthermore, spotify and friends are out of the question.
Lastly, your old radio doesn't catch any frequency that's
interesting to you.
But there's hope. While your old radio can't catch much more
than what's physically near it, the internet radios got you
covered.
Internet radios come in many varieties. Some of them are just
the internet version of old-school radios, and many of those
are mostly available to be listened through their website only,
so they can track you, show you ads, or cut the streaming after
you haven't been engaged to their website for some time. Worst
case scenario, they require you to get their android/ios app
that's riddled with who knows what.
I won't bother with those. I will focus on just a few Internet
radios that are available both through a webfront and a direct
streaming link, so you can tune in using a browser, or a media
player when the former is inconvenient.
Tilderadio
Link: tilderadio.org
I can't start without mentioning tilderadio. Tilderadio is the
online radio of the tildeverse. Members of the tildeverse
request time slots and stream things to their liking. There are
shows dedicated to music playlists and talk shows. Highly
recommended.
23
Link for media player
- https://azuracast.tilderadio.org/radio/8000/radio.ogg
Anonradio
Link: anonradio.net
One of oldest pubnixes is is the Super Dimension Fortress
Public Access UNIX system, or SDF for short. The folks at sdf
maintain anonradio.net. Like tilderadio, anonradio operates on
a volunteer basis, with DJs being members of the sdf. There's a
wide selection of music shows. Rock, synthpop, metal,
electronic, dubiousness, partying, languages, old and new.
There's something for almost everybody.
Link for media player
- https://anonradio.net:8443/anonradio
SOMA FM
Link: somafm.com
Soma fm is an entirely listener-supported independent radio
with as many as 30 channels dedicated to different music
genres.
- Do you like a mysterious sountrack in the background? The
secret agent channel might be of interest to you.
- Are you hacking together that project that has been keeping
you awake for many nights? Check out the DEF CON radio
channel.
- You haven't had enough of 70s style rock and wish you could
hear more of it? Here's Left Coast 70s.
24
- You prefer the synthpop of the 80s? Here's some more too at
Underground 80s.
And many more channels for you to explore, playing obscure and
popular tracks within the genre of the station.
Link for media player
There are too many channels to list all of them, see the
webpage for the other channels for more ways to listen to them.
- http://ice.somafm.com/secretagent
- http://ice.somafm.com/defcon
- http://ice.somafm.com/u8s0s
Lainchan radio
Link: lainon.life
While lainchan is itself an anonymous image board, with all the
controversy that entails, their radio project has given me many
hours of enjoyment and i believe it should be treated
seperately from the place it comes from. It has 4 channels.
- Cyberia, for electronic music in the style of the popular
japanese anime series Serial Experiments Lain's Cyberia Club.
- Cafe, for touhou arrangements, relaxing soundtracks and
mellow pop-rock songs. This is my favorite channel and the
radio i listen to the most.
- Swing, for swing, jazz and blues music. Very soothing,
energizing or both!
- Everything, a combination of all previous channels.
Link for media player
- https://lainon.life/radio/cyberia.ogg
25
- https://lainon.life/radio/cafe.ogg
- https://lainon.life/radio/swing.ogg
- https://lainon.life/radio/everything.ogg
KMFA 89.5
Link: www.kmfa.org
This is an old-school radio station located in Austin, Texas,
that happens to have an online streaming channel that fits
within the constraints of this guide.
Their focus is classical music. Their offer ranges from
Baroque, to the Modern period, including classical arrangements
of contemporary pop songs. Chamber, Cantata, Concerto, Mass,
Opera, and so on, you can find all of those here. This is the
single best radio for all of you classical music fans.
Link for media player
- https://kmfa.streamguys1.com/KMFA-mp3
R/a/dio
Link: r-a-d.io
This radio station is also part of the community of an
anonymous image board, but it can be safely ignored.
They focus mostly on anime and game soundtracks, if that's your
jam, you will probably like this. It's also possible to request
songs, but i haven't used this feature, so i don't know if it
works.
Link for media player
- https://relayO.r-a-d.io/main.mp3
26
Hackers.town radio
Link: hackers.town
Hackers.town is a fediverse instance that also happens to have
an radio stream that i discovered by chance. Their music
selection is very eclectic, so whatever label i might throw
will probably be too narrow. I can't recommend it enough, very
nice tunes there!
Link for media player
- https://radio.hackers.town:8000/
Wrapping up
These are only a handful of the hundreds, if not thousands, of
online radios that you can find online, and they were subject
to my own tastes and technical preferences. But surely there's
a radio out there that's more suited to your own likes. If you
feel like exploring this world, i would be thrilled to know
your findings and get to know more radios. If you'd like to do
so, please mail me to tsui@sdf.org.
Happy listening!
27
thermal printers!
some townies like to play with typewriters and s
ubmit to the zine with them. i play with a therm
al printer, so here’s a submission with it.
thermal printers are also known as receipt print
ers. they use thermal paper, which reacts to hea
t and darkens, so ink/toner is not needed, most
paper is 58mm or 80mm wide, but i have seen an A
5 printer ina french metro station. some printe
rs and papers support two-color printing, where
the second color is usually red, bluetooth, athe
rnet, wifi, USB, serial and parallel are all com
monly found. my printer has a CUPS driver, which
lets me print pretty much anything, but you can
contro! most printers without a driver just us|
ng printf:
acha Jucidiat racks | sudo tee /dev/usb/1p0
thermal printers speak ESC/POS, a protocol desig
ned by epson far its own printers that everyone
else followed, there are many manuals out there,
just look for ‘esc/pos reference’. you can also
use ‘python-escpos*, “escpas~php or “node-escp
as’, “Windows. Devices, PointOfService.POSPr inter”
, etc,
ASCII 1B escape followed by...
a Raset
~O Under line off
mal Under | ine on
ad Under ling, very
EO Bold off
El Bold or
GO Bold off (alias)
28
Gl Bald on (alias)
MO Use 12x24dots font
M1 Use @x24dote font
Ox?7b 0 Upside down off
ug uMop apisda T GLx0
1 <x> Set formatting bit flags:
10x00 Reset
{0x01 ee Bx24dots font
10x08 Bald
roxio Tall
fox20 Thkice
10x30 Lor se
d <x> Skip <x? lines
ASCII 1D group separator followed by...
BO Inverted off
Bl averted on
V 0x00 Cut completely
¥ 0x01 Cut, leave ane point uncut
there are a lot more commands depending on your
printer model. some printers can beep, open cash
drawers, control customer displays, read magnet
ic stripes on checks, generate barcodes and QR c
odes, print sideways, print images, define macro
s and run them, etc,
text encoding is a mess, thermal printers do not
know unicode! you can either render your text i
nto an image and print that, switch between the
supported codepages depending on your printer mo
del/firmware, or define your own custom characte
rs. here is the default codepage for my SII RP-F
10:
0129458 788abedef
6
29
1
2 179%’ xt, ~-./
3 0123456789: ; <=>?
4 AABCDEFGHIJKLMNO
§ PQRSTUVWKYZ°¢§*_
g ‘abcdefghi jk!mno
7 parstuvwxyzeue”
a Ciidddadc Abel T TAA
g Eakaooduyouee wtf
a A{GUANEQE 9% 14)
bo Bata ls
c Mee bt lp Eel
dee bet! fled
e abl WLopToONG- i «)
¢ Stzsfjsw°es Jy
the creator of escpos-php started a database of
thermal printer capabilities, including codepage
s, which can help in troubleshooting:
https: //mike42, me/escpos-pr inter-dh/
secret beep!
there are multiple documented commands for beeps
on differant models. some printers will just ac
cept the ASCII BEL character, 0x07, some want ES
C BEL (0x1B07). some want 0x1B2841040030 fol lowe
d by the sound type, beep count and beep duratio
n. | tried them all, but couldn’t get anything t
o work on my SII RP-F10. i used wireshark to cap
ture the SMB packets sent by the windows driver
to my samba server while it printed somathing, b
ecause the driver has an option to beep when ap
rint job starts and ends, so here is the hidden
beep command available on SII RP-D10, RP-E10, RP
-F10 and maybe others:
ESC RS <duration>? <unknown>
ESC is ASCII 1B escare
30
RS is ASCII 1E gecor separator
<duration> specifies the beep duration, in multi
ples of 2ms; 0-255 maps to 0-510ms.
<unknawn> is, wall, unknown, because it has no i
mpact on how the beep sounds.
the windows driver sends ESC RS 0x80 0x80.
a machine that beeps and slices paper over USB a
nd LAN, what else could i possibly ask for?
31
some examples of random transparent PNG images p
rinted using CUPS!
32
colophon
everything in this submission was originally printed using a
Seiko SII RP-F10 thermal printer on 80mm thermal paper. the
prints were then scanned on a Canon MF643Cdw at 300dpi using
xsane, and edited into the final JPEG images in this submission
using Jasc Paint Shop Pro 9 on Windows XP Pro SP3.
while the few demo prints of a lemon pie, coffee cup and ramen
bowl were printed using ~lp something.png™ via CUPS, all the
text was written in Vim, painstakingly inserting raw ESC/POS
commands using ~“V x <hex>>. The codepage table was generated
by an example script from the python-escpos project, then
slightly altered. The raw ESC/POS commands sent to the printer
to print all the text are in ~escpos_raw.bin.
33
Cardwords
Cardwords is a solo word game using playing cards as a letter
pool. The player draws cards and form words based on the
available letters represented by individual cards. It is
inspired by Sebastien Spirit’s Secret Message and
SCRABBLEgrams.
Cardwords is licensed under the Creative Commons Attribution
(cC BY 4.0) license.
Requirements
You will need:
- A deck of playing cards without jokers
- Something to write with, e.g. pen and paper
- (Optional) A dictionary to validate words
How to Play
Shuffle the deck of cards and set aside 4 cards, face up.
Deal a set of 8 cards in a row facing up.
Each card in the deck represents two letters of the alphabet,
starting with the Ace as A or N, 2 as B or O, and up to K as M
or Z (see the Letter Table). The aim is to form a word based on
each set of cards drawn. For each card, only one of the two
possible letters can be used, e.g. if the set has only 1 Ace,
pick either A or N, not both. If there are 2 Aces in the row,
the available letters can include 2 A, 2 N, or 1 A and N each.
The 4 extra cards set aside at the start are additional letter
choices that can be used to replace another card’s letters,
which could be useful for making longer words. Multiple cards
can be used on a word, but each card can only be used once
during the game.
34
A dictionary can optionally be used to check whether a word
played is valid.
Add up the score for the word (see the Scoring Words section).
Place the set of cards in a discard pile along with any of the
extra cards if they were used, and deal a new set of cards to
form the next word.
Dispense 6 sets of cards in total, then add up the word scores
for the final score. Try to get a total score of 200 or higher
to win.
Letter Table
Q
»
kK
Qa
Letters
4
ROGdrF oO MAN A UH WD PB
°
SUPRA GOH Qe HOA Dp Pp
NK MM FS GHNDWD WO HW O
Scoring Words
Score words by adding up letter values from their assigned
cards:
- Number cards have a value of 4 points
- Court cards (J, Q and K) are worth 8 points
35
Bonus multipliers are activated in certain scenarios:
- Using cards of the same colour or suit: x2 the total word
value
- Using all letters,
value
At the end of the game,
points to the total.
Example Gameplay
Extra cards:
Available letters:
Set 1
Cards drawn:
Available letters:
Word:
Score:
Set 2
Cards drawn:
Available letters:
Word:
Score:
Set 3
Cards drawn:
Available letters:
Word:
Score:
Set 4
Cards drawn:
Available letters:
Word:
Score:
i.e.
8-letter words:
if no extra cards were used,
x3 the total word
add 32
KD QD 2c 48
MZ LY BO DQ
QH 8D 3D 9S 3S 10H 10C 9H
LY HU CP IV CP JW JW IV
WHIPPY
8 + (4 * 5) = 28
KS 7S 7D KH 9D 8H 2S 4D
MZ GT GT MZ IV HU BO DQ
BUZZ
(4 * 2) + (8 * 2) = 24
2H 7H 4C JH 4H 9C 5D AD
BO GT DQ KX DQ IV ER AN
BEDDING
4* 7 = 28
3H 5H 6S 6D JS JD 3C KC
CP ER FS FS KX KX CP MZ
MEX
4+ (8 * 2) = 20
36
Set 5
Cards drawn: AC AH 6H 2D 8C 7C QC 5C
Available letters: AN AN FS BO HU GT LY ER
Word: BANGLES
Score: (4 * 6) + 8 = 32
Set 6
Cards drawn: 8S 10S 5S JC 6C OS AS 10D
Available letters: HU JW ER KX FS LY AN JW
Word: WHALE
Score: ((4 * 4) + 8) * 2 (same suit bonus) = 48
Total score: 28 + 24 + 28 + 20 + 32 + 48 + 32
(unused cards bonus)
= 212 points
37
An Affordable Portable Homelab
If you're anything like me then you probably love to tinker
with Linux things right? Spin up a server, configure it to do
something cool, maybe host something at your home for your
family to use. It's an expansive world of topics that's as deep
or as shallow as you care to delve! At least that's how I think
about Home Labbing.
The only real problem is that it can be an awfully expensive
hobby to get into. You need a server right? One of those
massive noisy jet engine machines with Xeon CPUs and fist fulls
of ram, and discs on discs on discs! And you need to fill up an
entire server rack with those boxes to really do it right,
right? What if we just didn't? It's awfully expensive to
purchase all that gear, and the power bill is unfathomably
painful. Plus when was the last time you got a lu server
through airport security? "Oh yes Mr. TSA Agent, this Dell R620
is my carry on.", nobody is allowing that, ever.
That's why I've built a tiny, affordable, & portable homelab on
a Dell Wyze 3040!
38
That's right, that tiny box is a homelab! Spec wise it's not
particularly impressive, but inclusive of all the little add on
parts it's more affordable than a raspberry pi, and has an
x86_64 cpu so it ends up being very easy to work with.
CPU......: Intel(R) Atom(TM) x5-Z8350 CPU @ 1.44GHz
MEM......: 2G (1.8G usable)
EMMC.....: 8GB
The quad core Atom cpu is capable enough to run a light weight
headless Linux OS like Alpine, you're just somewhat limited due
to the itty bitty amount of ram it has. You also get a full
gigabit NIC, and a few USB ports, so it ends up being easy to
throw in an external hard drive, or a USB adapter to make up
for what it lacks. I use mine as an LXD node (we'll talk a
little more about that further down), so I included the cost of
an external USB for those containers in my costs, and since I
travel there's also a wireless USB adapter too.
I managed to get a really good deal on Ebay for my Wyze, but if
you can find one on the lower side you probably only need to
worry about purchasing a 5v power supply for it, which can be
gotten off of Newegg for about $10. Everything else is just
odds and ends you probably already have. And honestly the only
piece you truly need is some USB compatible storage to make up
for the woefully small EMMC that the system comes with.
Right, enough about that, lets talk about that LXD setup. If
you're not familiar with what LXD is, I highly suggest you take
a quick jaunt over to Canonical's website where they have a
39
bunch of detailed documents about it. Since this is a zine and
it makes no sense to hyperlink that here I'll just explain it
in brief. LXD is an orchestration tool built on top of the LXC
container technology. LXC lets you spin up itty bitty Linux
containers that share the hosts kernel, but are isolated from
the rest of the system. Using this you spin up little Linux
systems, configure them however you want, and then destroy them
when you're done, or keep them around for hosting. That's kind
of the ethos of homelabbing in my mind, you try something hands
on, if you mess it up you throw it away and start over. What
you do when it succeeds is kind of a personal choice. Perhaps
you leave whatever you built running, or document the process
for a personal/public wiki, or you could be like me and
automate every little experiment with Ansible or something. The
world is your oyster! And that oyster fits inside of your carry
on!
Setup LXD on Alpine
Here's a little script I wrote to setup LXD on an Alpine
system. It's just a base, but it's good enough to go from the
initial installation directly to using LXD.
#!/bin/ash
#Setup clusterable 1lxd on alpine linux
ymdhms=$(date +%Y-%m-%d_%H:%M:%S )
install_apks() {
printf "Install apks..\n"
apk update
apk add linux-lts-dev lxd-feature lxc lxc-lvm lxcfs
bridge lxc-templates lxc-download xz gnupg rsync debootstrap
grep zfs zfs-lts zfs-scripts zfs-libs zfs-udev eudev eudev-
hwids hwdata dbus shadow util-linux util-linux-misc coreutils
iproute2 findutils usbutils pciutils sysfsutils gawk procps
grep binutils wget curl syslog-ng acpid awall haveged logrotate
qemu gqemu-img gemu-tools qemu-system-x86_64 qemu-ui-spice-core
qemu-chardev-spice qemu-audio-spice qemu-ui-spice-app qemu-hw-
usb-host qemu-hw-usb-redirect qemu-hw-display-virtio-gpu qemu-
40
hw-display-virtio-vga libvirt ovmf swtpm distrobuilder
distrobuilder-lxd make go git zram-init iptables ipétables
aufs-util e2fsprogs fennel lshw lua5.3-libs mosh openssl sudo
tmux
}
setup_lxc() {
printf "overlay\nip_tablesexifuse\n" | tee -a /etc/
modules
modprobe overlay ip_tables fuse
if [ -f /etc/lxc/default.conf ]; then
printf "Previous lxc config moved to /etc/1xc/
default.conf.bak-$ymdhms\n"
mv /etc/lxc/default.conf /etc/1lxc/
default.conf.bak-$ymdhms
fi
tf —£ /ete/contad/ixe ii sthen
printf "Previous lxc generic configuration moved
to /etc/conf.d/1lxc.bak-$ymdhms\n"
mv /etc/conf.d/lxc /etc/conf.d/lxc.bak-$ymdhms
‘fal
#This allows for unprivileged docker container execution
an) the iixe containers
printf "lxc.idmap = u 0 1000000 65536
ilxc.idmap = g 0 1000000 65536
ixc.cgroup.devices.allow = a
ixc.mount.auto = sys
ilxc.cap.drop =
security.nesting = true\n" > /etc/1lxc/default.conf
printf '# Configuration for /etc/init.d/1lxc[.*]
# Enable cgroup for systemd-based containers.
systemd_container=yes
# autostart groups (comma separated)
#1xc_group="onboot"
41
# Directory for container logs (used for symlinked runscripts
IPG ES Nic
llogdir=""/var/log/ixe' > V/etc/icont.d/ixc
}
unprivilege() {
if [ -d /etc/subuid ]; then
touch /etc/subuid
ieal.
if [ -d /etc/subgid ]; then
touch /etc/subgid
neal
sugid="root:1000000:65536"
if grep -q $sugid /etc/subuid; then
printf "subuid exists, skipping...\n"
else
printf "$sugid\n" | tee -a /etc/subuid
ea,
if grep -q $sugid /etc/subgid; then
printf "subgid eists, skipping...\n"
else
printf "$sugid\n" | tee -a /etc/subgid
aeal
#Enable cgfs in pam
printf "session optional pam_cgfs.so -c
freezer,memory,name=systemd,unified\n" | tee -a /etc/pam.d/
system-login
}
set_services() {
for service in cgroups lxd lxc lxcfs dbus zram-init; do
rc-update add $service default
done
42
for service in dbus cgroups 1lxd lxcfs; do
re-service $service start
done
examples() {
prince *
Getting Started:
deed anv’
Launch a container:
ixc launch images:alpine/edge containername
Restrict Memory, CPU, etc:
ilxc set containername limits.memory 100MB
ixc set containername limits.cpu 1
lxc config device override containername size=2GB
Jump into a container:
ixc exec containername /bin/ash
Move files between host & container:
ixc file push /path/on/host containername/path/in/container
ixc file pull containername/path/in/container /path/on/host
Nestable containers:
=> On the Ixc host
lxc config set containername security.nesting=1
-> Inside the container
apk add fuse-overlayfs
printf '{ \"storage-driver\": \"fuse-overlayfs\"}' > /etc/
docker/daemon. json
for service in cgroups cgroup-patch docker do;
rc-update add $service default
done
Privileged containers:
ilxc config set containername security.privileged=1
43
install_apks
unprivilege
setup_lxc
set_services
examples
Really the only thing left for you to do to take one of these
nifty little boxes and get yourself an itty bitty container
lab, is to run through the LXD init process. It's fairly self
explanatory, but make sure that you pass it the full name of
your USB thumb drive when your setup your ZFS pool. To do that
all you need to do is run fdisk -l, find the USB device in the
output, and then pass the /dev/sdx name to the 1xd pool
argument. Everything else you can setup as defaults!
Have fun tinkering townies!
44
Standard Vim
46
the standard text editor."
1S
"Ed